package mx.uam.ayd.dulceria.dominio;

/**
 * clse que representa un producto en la dulceria
 * @author Corporacion de oriente
 */
public class Producto {
        private String nombre;
        private String descripcion;
        private String marca;
        private int precioDeCompra;
        private int precioDeVenta;
        private int cantidadExistente;
        private int minimaCantidad;


        /**
         * Constructor por defecto
         *
         * @param nombre el nombre del producto
         * @param descripcion la descripcion del producto
         * @param marca la marca del producto
         * @param precioDeCompra el precio de compra del producto
         */
        public Producto(String nombre, String descripcion, String marca,
                        int precioDeCompra) {
                this.nombre = nombre;
                this.descripcion = descripcion;
                this.marca = marca;
                this.precioDeCompra = precioDeCompra;
                this.precioDeVenta = precioDeCompra*2;
        }
        /**
         * Este metodo devuelve el nombre de producto
         *
         * @return el nombre del producto
         */

        public String getNombre() {
                return nombre;
        }

        /**
         * Este metodo cambia el nombre de producto
         *
         * @param nombre el nombre que se asignara al producto
         */
        public void setNombre(String nombre) {
                this.nombre = nombre;
        }

        /**
         * Este metodo devuelve la descripcion de producto
         *
         * @return la descripcion del producto
         */
        public String getDescripcion() {
                return descripcion;
        }

        /**
         * Este metodo cambia la descripcion de producto
         * @param descripcion la descripcion del producto
         */
        public void setDescripcion(String descripcion) {
                this.descripcion = descripcion;
        }

        /**
         * Este metodo devuelve la marca de producto
         *
         * @return la marca de producto
         */
        public String getMarca() {
                return marca;
        }

        /**
         * Este metodo cambia la marca de producto
         *
         * @param marca la marca a establecer del producto
         */
        public void setMarca(String marca) {
                this.marca = marca;
        }

        /**
         * Este metodo devuelve el precio de compra del producto
         *
         * @return el precio de compra del producto
         */
        public int getPrecioDeCompra() {
                return precioDeCompra;
        }

        /**
         * Este metodo cambia el precio de compra del producto
         *
         * @param precioDeCompra el precio de compra a establecer del producto
         */
        public void setPrecioDeCompra(int precioDeCompra) {
                this.precioDeCompra = precioDeCompra;
        }

        /**
         * Este metodo devuelve el precio de venta del producto
         *
         * @return el precio de venta del producto
         */
        public int getPrecioDeVenta() {
            return precioDeVenta;
        }

        /**
         * Este metodo cambia el precio de venta del producto
         *
         * @param precioDeVenta el precio de venta a establecer del producto
         */
        public void setPrecioDeVenta(int precioDeVenta) {
                this.precioDeVenta = precioDeVenta;
        }

        /**
         * Este metodo devuelve la cantidad existente del producto
         *
         * @return la cantidad existente del producto
         */
        public int getCantidadExistente() {
                return cantidadExistente;
        }

        /**
         * Este metodo cambia la cantidad existente del producto
         *
         * @param cantidadExistente la cantidad existente a establecer del producto
         */
        public void setCantidadExistente(int cantidadExistente) {
                this.cantidadExistente = cantidadExistente;
        }

        /**
         * Este metodo devuelve la cantidad minima del producto
         *
         * @return la cantidad minima del producto
         */
        public int getMinimaCantidad() {
                return minimaCantidad;
        }

        /**
         * Este metodo cambia la cantidad minima del producto
         *
         * @param minimaCantidad la cantidad minima a establecer del producto
         */
        public void setMinimaCantidad(int minimaCantidad) {
                this.minimaCantidad = minimaCantidad;
        }

        /**
         * Metodo que se utiliza para vender un producto,
         * trata de decrementar la cantidad existente.
         * @param cantidad cantidad que se desea vender
         * @return true si tras decrementar no se a bajado del nivel minimo,
         * false si tras decrementar la cantidad existente es menor que el nivel minimo
         * @throws InsuficienteException Se lanza en caso de que la cantidad que
         * se desea decrementar supera a la cantidad existente.
         */
        public boolean decrementa(int cantidad) throws InsuficienteException{
            int resta=cantidadExistente-cantidad;
            if(resta<0) throw new InsuficienteException();
            if(resta<minimaCantidad){
                return false;
            }else{
                cantidadExistente=resta;
                return true;
            }
        }
}
